package com.silence.springboot.controller;

import com.mybatisflex.core.paginate.Page;
import com.silence.springboot.common.Result;
import com.silence.springboot.service.RoleService;
import com.silence.springboot.vo.input.AddRoleInput;
import com.silence.springboot.vo.input.PageRolesInput;
import com.silence.springboot.vo.input.UpdateRoleInput;
import com.silence.springboot.vo.output.PageRolesOutput;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 权限表 控制层。
 *
 * @author mybatis-flex-helper automatic generation
 * @since 1.0
 */
@Slf4j
@RestController
@RequiredArgsConstructor
@RequestMapping("/role")
@Tag(name = "权限表控制层")
public class RoleController {

    /**
     * 权限表 业务处理对象。
     */
    private final RoleService roleService;


    /**
     * 分页查询权限表
     *
     * @param input 分页查询权限表入参
     * @return 分页查询权限表出参
     */
    @PostMapping("/pageRoles")
    @Schema(name = "分页查询权限表", description = "分页查询权限表")
    public Result<Page<PageRolesOutput>> pageRoles(@RequestBody PageRolesInput input) {
        // 返回成功
        return Result.success(roleService.pageRoles(input));
    }

    /**
     * 新增权限表
     *
     * @param input 新增权限表入参
     * @return 新增权限表出参
     */
    @PostMapping("/addRole")
    @Schema(name = "新增权限表", description = "新增权限表")
    public Result<Void> addRole(@RequestBody AddRoleInput input) {
        // 新增权限表
        roleService.addRole(input);
        // 返回成功
        return Result.success(null);
    }

    /**
     * 修改权限表
     *
     * @param input 修改权限表入参
     * @return 修改权限表出参
     */
    @PostMapping("/updateRole")
    @Schema(name = "修改权限表", description = "修改权限表")
    public Result<Void> updateRole(@RequestBody UpdateRoleInput input) {
        // 新增权限表
        roleService.updateRole(input);
        // 返回成功
        return Result.success(null);
    }

    /**
     * 删除权限表
     *
     * @param id 权限表主键
     * @return 删除权限表出参
     */
    @GetMapping("/deleteRoleById/{id}")
    @Schema(name = "删除权限表", description = "删除权限表")
    public Result<Void> deleteRoleById(@PathVariable String id) {
        // 删除权限表
        roleService.deleteRoleById(id);
        // 返回成功
        return Result.success(null);
    }

    /**
     * 批量删除权限表
     *
     * @param ids 权限表主键数组
     * @return 批量删除权限表出参
     */
    @PostMapping("/deleteRoleByIds")
    @Schema(name = "批量删除权限表", description = "批量删除权限表")
    public Result<Void> deleteRoleByIds(@RequestBody List<String> ids) {
        // 删除权限表
        roleService.deleteRoleByIds(ids);
        // 返回成功
        return Result.success(null);
    }

}